import QtQuick 1.0
import "Components/"
import "Util/Util.js" as Util
import "Util/IncSearch.js" as IncSearch

Rectangle {
    id: _root
    width: parent.width
    height: _textTweet.height + _textTweet.anchors.topMargin + _textTweet.anchors.bottomMargin

    color: "#111111"

    property real density: 1.0                  // 密度
    property alias text: _textTweet.text        //入力されているテキストへのアクセス

    signal nextFocusLine(bool increment)    // フォーカスを次へ移動させる


    //フォーカスを設定する
    function setFocusTextEdit(is){
        if(is){
            _textTweet.forceActiveFocus();
        }else{
            _textTweet.focus = false;
        }
    }

    // ついーとの入力ボックス
    TextBox {
        id: _textTweet
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: _buttonTweet.left

        anchors.leftMargin: 5
        anchors.topMargin: 5
        anchors.rightMargin: 5
        anchors.bottomMargin: 5

        fontPixelSize: _Setting.fontPixelSizeInputBox * _root.density
        density: _root.density

        property string incSearchSymbol: ""     // サーチのきっかけの記号
        property string incSearchKind: ""       // サーチの種類

        onTextChanged: {
            // 検索の処理
            if(_menuContainer.isIncSearch() && incSearchKind.length > 0){
                // インクリメンタルサーチ中
                var cursor_pos = textCursorPosition;
                var at_pos = text.lastIndexOf(incSearchSymbol, cursor_pos);
                var sp_pos = text.lastIndexOf(" ", cursor_pos - 1); // 入力はじめでスペースの前に@入れるとスペースが見つかってしまうから
//                Util.outputDebugString("at=" + at_pos + ", sp=" + sp_pos + ", cur=" + cursor_pos);
                if((at_pos < 0) || (at_pos < sp_pos)){
                    // なくなった or スペースよりも前
                    _menuContainer.close(false);
                }else{
                    var names = IncSearch.getDatas(incSearchKind
                                          , text.substring(at_pos + 1, cursor_pos));
                    // リストを更新
                    _menuContainer.updateIncSearchList(names);
                }
            }

        }

        onTabPressed: {
            // フォーカス移動
            if(event.modifiers & Qt.ControlModifier){
                // + ctrl
                // ライン移動
                nextFocusLine(true);
            }else{
                _buttonTweet.forceActiveFocus();
            }
        }
        onBacktabPressed: {
            // フォーカス移動
            if(event.modifiers & Qt.ControlModifier){
                // + ctrl
                // ライン移動
                nextFocusLine(false);
            }else{
                _buttonTweet.forceActiveFocus();
            }
        }
        onEnterPressed: {
            if(event.modifiers & Qt.ControlModifier){
                // 送信
                sendTweet();

            }else if(_menuContainer.isIncSearch() && incSearchKind.length > 0){
                // 検索中
                var index = _menuContainer.getIncSearchResultIndex();
                var prev = incSearchSymbol + IncSearch.getLastSearchValue(incSearchKind);
                var next = incSearchSymbol + IncSearch.getInSelectedList(incSearchKind, index);

                Util.outputDebugString("result index=" + index
                                       + ", result=" + next
                                       + ", value=" + prev);

                // 検索結果で置き換え
                text = text.replace(prev, next);

                // カーソル位置を変更
                var pos = text.indexOf(next);
                textCursorPosition = pos + next.length;

                // 閉じる
                _menuContainer.close(false);
            }else{
                // 平常時は改行を受け付ける
                event.accepted = false;
            }
        }
        onEscapePressed: {
            // 閉じる
            if(_menuContainer.isIncSearch()){
                // サーチを閉じる
                _menuContainer.close(false);
                incSearchKind = "";
            }else{
                // ツイートエリアを閉じる
                _rootContainer.openSearchContainer(false);
            }
        }

        onPressed: {
            Util.outputDebugString("key=" + event.key);
            switch(event.key){
            case Qt.Key_F5:
                // 更新
                _root.parent.content.update();
                break;
            case Qt.Key_At:
                break;
            case Qt.Key_NumberSign:
                // ハッシュタグ検索開始
                if(_menuContainer.isIncSearch()){
                }else{
                    incSearchKind = IncSearch.SEARCH_KIND_HASH_TAG;
                    incSearchSymbol = IncSearch.getSearchSymbol(incSearchKind);
                    _menuContainer.open("MenuContextIncSearch");
                }
                break;

            case Qt.Key_Space:
                // スペース

                // サーチ中なら消す
                if(_menuContainer.isIncSearch()){
                    _menuContainer.close(false);
                    incSearchKind = "";
                }
                break;

            case Qt.Key_Up:
                // サーチ中なら動かす
                if(_menuContainer.isIncSearch()){
                    _menuContainer.moveIncSearchIndex(true);
                }
                break;

            case Qt.Key_Down:
                // サーチ中なら動かす
                if(_menuContainer.isIncSearch()){
                    _menuContainer.moveIncSearchIndex(false);
                }
                break;

            default:
                break;
            }

            var xxxxx=0;    // switchを正常動作させるためのダミーコード
        }
    }


    // ツイートボタン
    Button {
        id: _buttonTweet
        anchors.top: parent.top
        anchors.right: parent.right
        anchors.topMargin: 5
        anchors.rightMargin: 5
//        width: 50
        height: _textTweet.height
        density: _root.density

        text: "Search"
        font.pixelSize: _Setting.fontPixelSizeTweetButton * _root.density

        onClicked: {
            sendTweet();
        }
        Keys.onEnterPressed: {
            sendTweet();
        }
        Keys.onReturnPressed: {
            sendTweet();
        }
        Keys.onTabPressed: {
            // フォーカス移動
            if(event.modifiers & Qt.ControlModifier){
                // + ctrl
                // ライン移動
                nextFocusLine(true);
            }else{
                _textTweet.forceActiveFocus();
            }
        }
        Keys.onBacktabPressed: {
            // フォーカス移動
            if(event.modifiers & Qt.ControlModifier){
                // + ctrl
                // ライン移動
                nextFocusLine(false);
            }else{
                _textTweet.forceActiveFocus();
            }
        }
        Keys.onEscapePressed: {
            // 閉じる
            _root.parent.openTweetContainer(false);
        }
        Keys.onPressed: {
            switch(event.key){
            case Qt.Key_F5:
                // 更新
                _root.parent.content.update();
                break;
            default:
                break;
            }
        }
    }

    //つぶやく
    function sendTweet(){
        var len = _textTweet.text.length;
        if(len < 1){
            //トースト表示
            _toast.show("Please input keyword.")
        }else{
            //つぶやく
            _root.parent.content.getSearchModel().queryString = _textTweet.text;
            _root.parent.content.state = "Search"
//            _textTweet.text = "";
        }
    }
}
